package study.多线程;

public class MemberMethods {
	public static void main(String[] args) throws InterruptedException {
		/*
		Thread成员方法
		String getName()					返回此线程的名称
		void setName(String name)			设置线程的名字（构造方法也可以设置名字）
			如果没有设置名字，线程默认名字为：Thread-x
			如果要设置名字，可以用setName也可以用构造方法
		static Thread currentThread()		获取当前线程的对象
			那条线程执行获取那条线程。
			当JVM虚拟机启动之后，会自动的启动多条线程。
			其中有一条就焦作main线程。它的作用是去调用main方法，并执行里面的代码
			
		static void sleep(long time)		让线程休眠指定的事件，单位为毫秒
			哪条线程执行到这个方法就会停留，停留 time毫秒
			当事件到了之后线程会自动醒来继续执行代码
		setPriority(int newPriority)		设置线程的优先级(1-10)
			线程从1~10，默认为5
		final int getPriority()				获取线程的优先级
		final void setDaemon(boolean on)	设置为守护线程
			守护线程：备胎线程。当非守护线程执行完毕，守护线程就会陆续结束
		public static void yield()			出让线程\礼让线程
		public static void join()			插入线程\插队线程
			
		 */
		
		//1.创建线程的对象
		MyThreadDemo t1 = new MyThreadDemo();
		MyThreadDemo t2 = new MyThreadDemo("t2");
		
		//设置名称
		t1.setName("t1");
		// t1插入man之前
		t1.join();
		// 设置守护线程
		t2.setDaemon(true);
		
		//开启线程
		t1.start();
		t2.start();
		
		System.out.println("1111111");
		Thread.sleep(5000);//当前的线程停留5s
		System.out.println("2222222");
		
		
		//String getName()					返回此线程的名称
		
		
		
		
		
	}
}
class MyThreadDemo extends Thread {
	public MyThreadDemo() {}
	
	public MyThreadDemo(String name){
		super(name);
	}
	static Object obj = new Object();
	
	@Override
	public void run() {
		// 锁对象可以是任意的，但一定要是唯一的。
		synchronized (obj) {
			for (int i = 0; i < 100; i++) {
				System.out.println(getName() + "@" + i);
				Thread.yield();//出让cpu的执行权
			}
		}
	}
}
